import { IBaseDataType } from '../Fighting/Type/CommonType';
import Base from '../Fighting/Base/Base';
import { BackPackInstence } from './BackPackManager';
/*
 * @features: 功能
 * @description: 说明
 * @Date: 2020-09-03 13:35:19
 * @Author: judu233(769471424@qq.com)
 * @LastEditTime: 2021-09-12 15:41:08
 * @LastEditors: judu233
 */

const { ccclass, property } = cc._decorator;

/**品质 */
export enum EQualityType {
    /**破烂 */
    Tattered = `Tattered`,
    /**普通 */
    Ordinary = `Ordinary`,
    /**稀有 */
    Rare = `Rare`,
    /**精品 */
    Boutique = `Boutique`,
    /**史诗 */
    Epic = `Epic`,
    /**传说 */
    Legend = `Legend`,
    /**神器 */
    Artifact = `Artifact`,
    /**特殊 */
    Special = `Special`,
}

/**物品类型 */
export enum EItemType {
    /**物品 */
    Article = `Article`,
    /**装备 */
    Equipment = `Equipment`,
    /**剧情物品 */
    StoryItems = `StoryItems`,
    /**材料 */
    Material = `Material`,
}

/** 物品数据 */
export interface IItemDataType extends IBaseDataType {
    /**品质 */
    quality: EQualityType;
    /**类型 */
    type: EItemType;
    /**等级 */
    level: number;
    /**价格 */
    price: number;
    /**重量 */
    weight: number;
    /**建议卖价 */
    sellingPrice?: number;
}

/**  
    * @Title : 物品基类
    * @Description : 物品类
 **/
@ccclass
export default class ItemBase extends Base {
    /**物品属性 */
    public data: IItemDataType;

    public get itemName(): string {
        return this.checkGet(() => {
            return this.data.name;
        });
    }
    public set itemName(value: string) {
        this.checkSet(() => {
            this.data.name = value;
            this.nameView(value);
        })
    }
    /**物品名字 */
    @property({
        type: cc.Label,
        displayName: `名字文本`,
        tooltip: `物品显示的名字`
    })
    public com_nameLabel: cc.Label = null;
    public nameView(value: string) {
        if (this.com_nameLabel) this.com_nameLabel.string = value;
    }

    /**//* 说明 */
    public get description(): string {
        return this.checkGet(() => {
            return this.data.description;
        });
    }
    public set description(value: string) {
        this.checkSet(() => {
            this.data.description = value;
            this.descriptionView(value);
        });
    }
    /**物品说明*/
    @property({
        type: cc.Label,
        displayName: `说明文本`,
        tooltip: `物品显示的说明`
    })
    public com_descriptionLabel: cc.Label = null;
    public descriptionView(value: string) {
        if (this.com_descriptionLabel) this.com_descriptionLabel.string = value;
    }

    /**初始化物品 */
    public initItem(data: IItemDataType) {
        this.data = data;
        this.refreshView();
    }

    /**刷新文本显示 */
    public refreshView() {
        this.nameView(this.data.name);
        this.descriptionView(this.data.description);
    }

    /**使用 */
    public use() {
        if (!this.isCanUse()) return;
        cc.log(`使用物品${this.itemName}`);
        BackPackInstence.backPack.throwAway(this.data.id);
    }

    /**是否可以使用 */
    public isCanUse() {
        switch (this.data.type) {
            case EItemType.Material:
            case EItemType.Equipment:
            case EItemType.StoryItems:
                return false; //装备，材料,剧情物品不可用
            case EItemType.Article:
                return true;
            default:
                cc.warn(`类型${this.data.type}错误，请分类`);
        }
    }
}
